﻿using LandingPlan;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Transactions;

namespace LandingPlan
{
    /// <summary>
    /// 项目信息变更管理
    ///     使用了设计模式之外观模式：给复杂的子系统提供统一的简单的访问方式
    /// </summary>
    public class ProjectInfoChangedMgr
    {
        /// <summary>
        /// 获取变更的项目信息集合
        /// </summary>
        /// <param name="filter">筛选条件</param>
        /// <returns></returns>
        public static PageList<ProjectChangedInfo> GetProjectInfoChangedList(ProjectInfoChangedParam filter)
        {
            if (!IsServiceAvailable())
            {
                return null;
            }
            return ProjectInfoChangedCmd.GetProjectInfoChangedList(filter);
        }

        /// <summary>
        /// 变更项目信息（指定变更）
        /// </summary>
        /// <param name="projectChangedInfoList"></param>
        public static void ChangeProjectInfo(List<ProjectChangedInfo> projectChangedInfoList)
        {
            if (projectChangedInfoList == null || projectChangedInfoList.Count == 0 || projectChangedInfoList.All(p => p == null))
            {
                throw new Exception("未传入任何项目变更信息，无法执行当前操作！");
            }
            ProjectInfoChangedCmd.ChangeProjectInfo(projectChangedInfoList);
        }

        /// <summary>
        /// 变更项目信息（全范围）
        /// </summary>
        /// <param name="projectChangedInfoList"></param>
        public static void ChangeProjectInfo()
        {
            ProjectInfoChangedCmd.ChangeProjectInfo(null);
        }

        #region 辅助方法

        /// <summary>
        /// 是否服务可用
        ///     可能存在服务不开启的情况
        /// </summary>
        /// <returns></returns>
        private static bool IsServiceAvailable()
        {
            // 模拟获取是否服务可用
            return true;
        }

        #endregion
    }

    /// <summary>
    /// 项目信息变更工具类：提供项目信息变更的实际功能
    /// </summary>
    internal class ProjectInfoChangedCmd
    {
        /// <summary>
        /// 获取变更的项目信息集合
        /// </summary>
        /// <param name="filter">筛选条件</param>
        /// <returns></returns>
        public static PageList<ProjectChangedInfo> GetProjectInfoChangedList(ProjectInfoChangedParam filter)
        {
            // 模拟数据门户访问
            return (new ProjectInfoChangedCmdFactory()).DataPortal_Execute_GetProjectInfoChangedList(filter);
        }

        /// <summary>
        /// 变更项目信息
        /// </summary>
        /// <param name="projectChangedInfoList">为空时，表示全范围；不为空时，指定范围</param>
        public static void ChangeProjectInfo(List<ProjectChangedInfo> projectChangedInfoList)
        {
            // 模拟数据门户访问
            (new ProjectInfoChangedCmdFactory()).DataPortal_Execute_ChangeProjectInfo(projectChangedInfoList);
        }
    }
}

